// pages/mall/detail.js

// 封装request为Promise
function request(options) {
  return new Promise((resolve, reject) => {
    wx.request({
      ...options,
      success: (res) => {
        resolve(res.data);
      },
      fail: (err) => {
        reject(err);
      }
    });
  });
}

Page({
  data: {
    id: null,
    product: null,
    isLoading: true,
    quantity: 1,
    isCollected: false,
    addressInfo: null,
    showAddressModal: false,
    address: {
      name: '',
      phone: '',
      address: '' // 简化为单一地址字段
    },
    userId: null,
    isLoggedIn: false
  },

  onLoad(options) {
    console.log('商品详情页加载，参数:', options);
    
    // 确保forceLogin设为false，以便正常检查登录状态
    const forceLogin = false;
    
    if (options.id) {
      this.setData({
        id: options.id
      });
      
      // 先检查登录状态，获取用户信息
      if (!forceLogin) {
        this.checkLoginStatus();
      }
      
      // 后加载商品详情，不依赖登录状态
      this.loadProductDetail();
    } else {
      console.error('商品ID不存在');
      wx.showToast({
        title: '商品ID不存在',
        icon: 'none'
      });
      setTimeout(() => {
        wx.navigateBack();
      }, 1500);
    }
  },

  // 检查登录状态
  checkLoginStatus() {
    // 尝试多种可能的登录状态存储方式
    const userInfo = wx.getStorageSync('userInfo');
    const token = wx.getStorageSync('token');
    
    // 打印详细的调试信息
    console.log('当前登录状态检查:', { 
      userInfo: JSON.stringify(userInfo), 
      hasToken: !!token,
      storageKeys: wx.getStorageInfoSync().keys
    });
    
    if ((userInfo && (userInfo.id || userInfo.userId || userInfo.openid)) || token) {
      // 确定用户ID：优先使用id，其次是userId，再次是openid
      let userId;
      
      if (userInfo) {
        userId = userInfo.id || userInfo.userId || userInfo.openid || '1';
      } else {
        // 如果只有token没有userInfo，则使用默认id
        userId = '1';
      }
      
      this.setData({ 
        userId: userId,
        isLoggedIn: true
      });
      
      console.log('用户已登录，用户ID:', userId);
      
      // 已登录，获取用户相关信息
      this.getUserAddress(userId);
      this.checkCollection();
    } else {
      this.setData({
        isLoggedIn: false,
        addressInfo: null
      });
      console.log('用户未登录，部分功能受限');
    }
  },

  // 加载商品详情
  async loadProductDetail() {
    this.setData({
      isLoading: true
    });
    
    try {
      console.log('开始加载商品详情, ID:', this.data.id);
      
      // 使用封装的request直接请求商品详情
      const result = await request({
        url: `http://localhost:8080/api/products/${this.data.id}`,
        method: 'GET'
      });
      
      console.log('商品详情API返回:', result);
      
      // 更灵活地处理成功响应
      if ((result.code === 200 || result.code === 0) && result.data) {
        console.log('成功获取商品详情');
        this.setData({
          product: result.data,
          isLoading: false
        });
      } else {
        console.log('获取商品详情失败:', result);
        wx.showToast({
          title: result.message || '获取商品详情失败',
          icon: 'none'
        });
        setTimeout(() => {
          wx.navigateBack();
        }, 1500);
      }
    } catch (error) {
      console.error('获取商品详情失败:', error);
      wx.showToast({
        title: '获取商品详情失败，请重试',
        icon: 'none'
      });
      setTimeout(() => {
        wx.navigateBack();
      }, 1500);
    } finally {
      this.setData({
        isLoading: false
      });
    }
  },

  // 检查是否已收藏
  async checkCollection() {
    // 此处应有检查收藏的逻辑，暂时保留简化版
    this.setData({
      isCollected: false
    });
  },

  // 获取用户地址
  async getUserAddress(userId) {
    try {
      console.log('正在获取用户地址，用户ID:', userId);
      
      // 构建请求地址
      const url = `http://localhost:8080/api/userCollections/address/${userId}`;
      console.log('请求地址:', url);
      
      const result = await request({
        url: url,
        method: 'GET'
      });
      
      console.log('地址API返回结果:', result);

      // 处理成功响应，接受code为200或0的成功状态
      if ((result.code === 200 || result.code === 0) && result.data) {
        // 处理返回的地址数据
        // 如果后端直接返回address字段，则直接使用
        // 如果返回的是分散的地址字段，则拼接到address中
        const addressData = {
          name: result.data.name || '',
          phone: result.data.phone || '',
          address: result.data.address || this.combineAddress(result.data)
        };
        
        this.setData({
          addressInfo: addressData,
          address: {
            name: addressData.name,
            phone: addressData.phone,
            address: addressData.address
          }
        });
        console.log('成功设置地址信息:', this.data.addressInfo);
      } else if (result.code === 404) {
        // 用户地址不存在，设置一个默认空地址
        console.log('用户地址不存在，可以添加新地址');
        this.setData({
          addressInfo: null
        });
      } else {
        console.log('获取地址失败:', result.message || '未知错误');
      }
    } catch (error) {
      console.error('获取用户地址失败:', error);
      // 即使地址获取失败，也不影响商品详情的显示
      this.setData({
        addressInfo: null
      });
    }
  },
  
  // 合并地址信息
  combineAddress(data) {
    // 如果后端返回的是分散的地址字段，则拼接为完整地址字符串
    if (!data) return '';
    
    let address = '';
    
    if (data.province) address += data.province;
    if (data.city) address += ' ' + data.city;
    if (data.district) address += ' ' + data.district;
    if (data.detailAddress) address += ' ' + data.detailAddress;
    
    // 如果用户信息中有address字段，但没有拼接出地址，则直接使用
    if (!address && data.address) {
      address = data.address;
    }
    
    return address.trim();
  },

  // 显示修改地址弹窗
  showAddressEditModal() {
    if (!this.data.isLoggedIn) {
      this.promptLogin();
      return;
    }
    this.setData({
      showAddressModal: true
    });
  },

  // 关闭修改地址弹窗
  closeAddressModal() {
    this.setData({
      showAddressModal: false
    });
  },

  // 提示登录
  promptLogin() {
    wx.showModal({
      title: '提示',
      content: '该功能需要登录后使用，是否前往登录？',
      success: (res) => {
        if (res.confirm) {
          wx.navigateTo({
            url: '/pages/login/index'
          });
        }
      }
    });
  },

  // 输入框内容变化处理
  onAddressInput(e) {
    const { field } = e.currentTarget.dataset;
    this.setData({
      [`address.${field}`]: e.detail.value
    });
  },

  // 保存地址信息
  async saveAddress() {
    if (!this.data.isLoggedIn) {
      this.promptLogin();
      return;
    }

    const { address, userId } = this.data;
    
    // 表单验证
    if (!address.name || !address.phone || !address.address) {
      wx.showToast({
        title: '请完整填写地址信息',
        icon: 'none'
      });
      return;
    }
    
    // 手机号格式验证
    if (!/^1\d{10}$/.test(address.phone)) {
      wx.showToast({
        title: '请输入正确的手机号',
        icon: 'none'
      });
      return;
    }

    console.log('准备保存地址信息:', { userId, address });
    wx.showLoading({ title: '保存中...' });

    try {
      const params = {
        ...address,
        userId
      };

      // 判断是更新还是新增
      const isUpdate = !!this.data.addressInfo;
      const url = isUpdate
        ? `http://localhost:8080/api/userCollections/address/update`
        : `http://localhost:8080/api/userCollections/address/add`;

      console.log(`正在${isUpdate ? '更新' : '新增'}地址, 请求地址:`, url);
      console.log('请求参数:', params);

      const result = await request({
        url,
        method: 'POST',
        data: params
      });

      console.log('保存地址返回结果:', result);

      if (result.code === 200 || result.code === 0) {
        wx.hideLoading();
        wx.showToast({
          title: '地址保存成功',
          icon: 'success'
        });
        
        // 重新获取地址信息
        await this.getUserAddress(userId);
        
        // 关闭弹窗
        this.closeAddressModal();
      } else {
        wx.hideLoading();
        wx.showToast({
          title: result.message || '保存地址失败',
          icon: 'none'
        });
      }
    } catch (error) {
      wx.hideLoading();
      console.error('保存地址失败:', error);
      wx.showToast({
        title: '保存地址失败，请重试',
        icon: 'none'
      });
    }
  },

  // 增加数量
  increaseQuantity() {
    if (this.data.product && this.data.quantity < this.data.product.stock) {
      this.setData({
        quantity: this.data.quantity + 1
      });
    } else {
      wx.showToast({
        title: '已达到最大可购买数量',
        icon: 'none'
      });
    }
  },

  // 减少数量
  decreaseQuantity() {
    if (this.data.quantity > 1) {
      this.setData({
        quantity: this.data.quantity - 1
      });
    }
  },

  // 立即购买
  onBuy() {
    if (!this.data.product) return;
    
    if (!this.data.isLoggedIn) {
      this.promptLogin();
      return;
    }
    
    if (this.data.product.stock <= 0) {
      wx.showToast({
        title: '商品库存不足',
        icon: 'none'
      });
      return;
    }
    
    if (!this.data.addressInfo) {
      wx.showToast({
        title: '请先添加收货地址',
        icon: 'none'
      });
      this.showAddressEditModal();
      return;
    }
    
    wx.showToast({
      title: '兑换功能开发中...',
      icon: 'none'
    });
    // 实际购买逻辑在这里实现
  },

  // 添加/取消收藏
  toggleCollection() {
    if (!this.data.isLoggedIn) {
      this.promptLogin();
      return;
    }
    
    this.setData({
      isCollected: !this.data.isCollected
    });
    
    wx.showToast({
      title: this.data.isCollected ? '已收藏' : '已取消收藏',
      icon: 'success'
    });
    
    // 实际收藏/取消收藏API调用应该在这里实现
  },
  
  // 分享商品
  onShareAppMessage() {
    if (this.data.product) {
      return {
        title: this.data.product.name,
        path: `/pages/mall/detail?id=${this.data.id}`,
        imageUrl: this.data.product.imageUrl
      };
    }
    return {};
  }
}); 